'Chip settings
#chip 16F877A, 20
#config HS_OSC, LVP_OFF, WDT_OFF

'Ports
#define RedEW PORTD.0
#define AmberEW PORTD.1
#define GreenEW PORTD.2
#define RedNS PORTD.3
#define AmberNS PORTD.4
#define GreenNS PORTD.5

'General settings
#define RedTime 1 s
#define AmberTime 2 s
#define GreenTime 5 s

'Tokens
#define red 1
#define amber 2
#define green 3

'Initialise
dir A0 IN
dir D 0
LightNS Red
LightEW Red

Start:
 'Cycle for NS (EW remains red)
 LightNS Green
 wait GreenTime
 LightNS Amber
 wait AmberTime
 LightNS Red
 wait RedTime

 'Cycle for EW (NS remains red)
 LightEW Green
 wait GreenTime
 LightEW Amber
 wait AmberTime
 LightEW Red
 wait RedTime
goto Start

sub LightNS(colour)
 set RedNS off
 set AmberNS off
 set GreenNS off
 if colour = red then set RedNS on
 if colour = amber then set AmberNS on
 if colour = green then set GreenNS on
end sub

sub LightEW(colour)
 set RedEW off
 set AmberEW off
 set GreenEW off
 if colour = red then set RedEW on
 if colour = amber then set AmberEW on
 if colour = green then set GreenEW on
end sub